/****************************************************
 * 创建人:   robin
 * 创建时间: 2023/8/30.030 14:38
 * 项目名称: cpy
 * 文件名称: HandleMessageService.java
 * 文件描述:
 *
 * All rights Reserved, Designed By 德品软件
 * @Copyright:2023-2023
 *
 ********************************************************/
package com.dp.service;

import com.dp.dto.BaseMqMessage;
import com.dp.dto.MsgUnitDto;
import com.dp.enumeration.ServerPortEnum;
import com.dp.vo.response.ResponseData;

import java.nio.ByteBuffer;

/**
 * 包名称：com.dp.service
 * 类名称：HandleMessageService
 * 类描述：
 * 创建人：robin
 * 创建时间：2023/8/30.030 14:38
 */
public interface HandleMessageService {
    /**
     *  初始化服务
     * @return
     */
    ResponseData initService();

    /**
     * 往接受队列插入数据
     * @param serverPort
     * @param msgUnitDto
     * @return
     */
    ResponseData pushRecvData(Integer serverPort, MsgUnitDto msgUnitDto);

    /**
     * 从接受队列取数据
     * @param serverPort
     * @return
     */
    ResponseData<MsgUnitDto> pollRecvData(Integer serverPort);

    /**
     * 往发送队列取数据
     * @param serverPort
     * @param key
     * @param data
     * @return
     */
    ResponseData pushSendData(Integer serverPort, String key, ByteBuffer data);

    /**
     * 从发送队列取数据
     * @param serverPort
     * @param key
     * @return
     */
    ResponseData<ByteBuffer> pollSendData(Integer serverPort, String key);

    /**
     * 往MQ队列放数据
     * @param topic
     * @param msg
     * @return
     */
    ResponseData pushMq(String topic, BaseMqMessage msg);

    /**
     * 处理接收到的报文消息
     * @return
     */
    boolean handleRecvMsg();

    /**
     * 处理加油站数据平台的Token
     */
    void handlePsdpToken();

    /**
     * 处理新连接
     * @param serverPortEnum
     * @param ip
     * @param port
     * @return
     */
    ResponseData handleNewConnection(ServerPortEnum serverPortEnum, String ip, int port);

    /**
     * 清理连接
     * @param serverPortEnum
     * @param ip
     * @param port
     * @return
     */
    ResponseData clearConnection(ServerPortEnum serverPortEnum, String ip, int port);

    /**
     * 发送询问
     */
    void sendAsk();

    /**
     * 发送油罐心跳
     */
    void sendTankHeartbeat();

    /**
     * 发送油罐命令
     */
    void sendTankDataCmd();

    /**
     * 发送MQ
     */
    void sendMq();

    /**
     * 打印状态
     */
    void printStatus();

}
